package com.xs.tool.common.utils;
import com.xs.tool.common.constant.Constants;

import java.util.HashMap;
import java.util.Map;


/**
 * 字符串工具类
 *
 * @author xkzhangsan
 */
public class StringUtil {

    /**
     * 判断是否为空字符串
     * @param str 字符串
     * @return boolean 如果为空，则返回true
     */
    public static boolean isEmpty(String str){
        return str == null || str.trim().length() == 0;
    }

    /**
     * 判断字符串是否非空
     * @param str 如果不为空，则返回true
     * @return boolean
     */
    public static boolean isNotEmpty(String str){
        return !isEmpty(str);
    }

    /**
     * 是否纯数字
     * @param str 字符串
     * @return boolean
     */
    public static boolean isNumeric(String str){
        if(str == null){
            return false;
        }
        return Constants.NUMERIC_REGEX.matcher(str).matches();
    }

    /**
     * 判断字符串是否以字母开头
     * @param str 如果不为空，则返回false
     * @return boolean
     */
    public static boolean isStartWithWord(String str){
        if(str == null){
            return false;
        }
        return Constants.START_WITH_WORD_REGEX.matcher(str).matches();
    }

    /**
     * 计算字符出现次数
     * @param str 如果不为空，则返回0
     * @param target 需要计算的字符串
     * @return 出现次数
     */
    public static int countWord(String str, String target){
        if(str == null){
            return 0;
        }
        int len1 = str.length();
        int len2 = str.replace(target, "").length();
        return (len1-len2);
    }

    /**
     * 判断字符串是包含中文
     * @param str 如果不为空，则返回false
     * @return boolean
     */
    public static boolean hasChinese(String str){
        if(str == null){
            return false;
        }
        return Constants.CHINESE_REGEX.matcher(str).find();
    }

    /**
     * 转换节日数据为map
     * @param holidayData
     * @return 返回节日map
     */
    public static Map<String, Integer> convertHolidayDataToMap(String holidayData){
        Map<String, Integer> dateTypeMap = new HashMap<>();
        if(isEmpty(holidayData)){
            return dateTypeMap;
        }

        String[] dateTypeArr = holidayData.replace(" ", "").split(",");
        for(String dateType : dateTypeArr){
            String[] arr = dateType.split(":");
            dateTypeMap.put(arr[0], Integer.valueOf(arr[1]));
        }
        return dateTypeMap;
    }
}
